#ifndef ARRAY_H

#define ARRAY_H

struct arr_elem
{
	int magic_number;
	union
	{
		int int_val;
		void* ptr_val;
	};
};

typedef struct
{
	int size;		//Размер массива

	struct arr_elem* ptr;	//Указатель на массив

} 
	array_t;

//Создать массив
array_t *array_create( int arrsize);

//Удалить массив
void array_delete( array_t** arr);

//Вставить int (val) в массив (arr) на указанное место (i)
void array_set_elem_int( array_t* arr, int i, int val);

//Вставить указатель (val) в массив (arr) на указанное место (i)
void array_set_elem_ptr( array_t* arr, int i, void *val);

//Запросить размер массива arr
int array_get_size( array_t *arr);

//Изменить размер массива arr на new_size
void array_resize( array_t* arr, int new_size);

//Получить int в массиве arr по указанному индексу (i)
int array_get_elem_int( array_t* arr, int i);

//Получить указатель в массиве arr по указанному индексу (i)
void* array_get_elem_ptr( array_t* arr, int i);

#endif //ARRAY_H
